package com.zdb.n1.service;

import com.zdb.n1.entity.FitnessGoal;
import com.zdb.n1.entity.User;
import com.zdb.n1.payload.response.MessageResponse;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.time.LocalDateTime;
import java.util.List;

public interface FitnessGoalService {

    FitnessGoal saveFitnessGoal(FitnessGoal fitnessGoal);

    FitnessGoal getFitnessGoalById(Long id);

    List<FitnessGoal> getAllFitnessGoalsForCurrentUser();

    Page<FitnessGoal> getFitnessGoalsForCurrentUserPaged(Pageable pageable);

    List<FitnessGoal> getFitnessGoalsByStatus(FitnessGoal.GoalStatus status);

    List<FitnessGoal> getFitnessGoalsByType(FitnessGoal.GoalType type);

    List<FitnessGoal> getExpiredActiveGoals();

    List<FitnessGoal> getUpcomingGoals();

    FitnessGoal updateGoalProgress(Long id, Double progress);

    FitnessGoal completeGoal(Long id);

    MessageResponse deleteFitnessGoal(Long id);
    
    // 以下是管理员管理用户健身目标所需的方法
    
    // 根据ID获取健身目标（不验证当前用户，供管理员使用）
    FitnessGoal getGoalById(Long id);
    
    // 获取指定用户的所有健身目标
    List<FitnessGoal> getGoalsByUser(User user);
    
    // 获取指定用户的指定状态的健身目标
    List<FitnessGoal> getGoalsByUserAndStatus(User user, FitnessGoal.GoalStatus status);
    
    // 更新健身目标（不验证当前用户，供管理员使用）
    FitnessGoal updateGoal(Long id, FitnessGoal fitnessGoal);
    
    // 删除健身目标（不验证当前用户，供管理员使用）
    MessageResponse deleteGoal(Long id);
} 